package com.lanswon.qzsmk.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.lanswon.qzsmk.model.CardControl;
import com.lanswon.qzsmk.model.StockDetail;

@Repository
public interface StockDetailMapper {

	/**
	 * 保存
	 * @param record
	 * @return
	 */
    int insert( StockDetail stockdetail);
    
    /**
	 * 保存
	 * @param record
	 * @return
	 */
    String queryMaxDetailId();
    
    /**
	 * 根据库存ID查明细ID
	 * @param stockSumId 库存ID
	 * @return
	 */
    Integer queryStockDetailIdByStockSum(String stockSumId);
    
    /**
	 * 查询配送卡片的信息
	 * @param record
	 * @return
	 */
    List<CardControl> queryDistributeDetailByTaskNo(@Param("taskNoList")List<String> taskNoList,
    		                                 @Param("cardPCodeList")List<String> cardPCodeList);
    
    /**
	 * 更新库存汇总明细
	 * @param sdObj 库存明细对象
	 * @return
	 */
    int updateStockDetailByDistribute(StockDetail sdObj);
    /**
	 * 根据入库流水号查询入库撤销信息
	 * @param companyNo
	 * @return
	 */
    StockDetail queryStockDetailByStorNo(String storageNo);
    
    /**
   	 * 删除
   	 * @param companyNo
   	 * @return
   	 */
    void deleteByStockDetail(StockDetail sd);
    
    /**
   	 * 删除
   	 * @param taskNO
   	 * @return
   	 */
    void deleteByTaskNo(String taskNO);
    
    /**
	 * 根据任务编号和库存汇总ID查询能信息
	 * @param companyNo
	 * @return
	 */
	StockDetail queryStockDetailByTakNoANDStockSumId(@Param("stockSumId")String stockSumId,@Param("taskNo")String taskNo);
	
	/**
	 * 通过入库流水号删除库存汇总明细信息
	 * @param storageNo
	 * @param batchNoList
	 */
	void deleteByIncomingCancel(@Param("storageNo")String storageNo);
	
	/**
	 * 出库撤销，更新库存明细
	 * @param storageNo
	 */
	void updateByDistributeCancel(@Param("storageNo")String storageNo,@Param("stockSumIdByDisList")List<String> stockSumIdByDisList);
	
	/**
	 * 通过任务查询在库状态
	 * @param taskNoList
	 * @return
	 */
	List<String> queryInStockStateByTaskNoList(@Param("taskNoList")List<String> taskNoList);
	
	/**
	 * 通过入库号和库存状态查询
	 * @param storageNo
	 * @return
	 */
	StockDetail queryStockDetailByStorageNo(@Param("storageNo")String storageNo);
	
	/**
	 * 通过明细号查询信息
	 * @param stockDetailId
	 * @return
	 */
	List<StockDetail> queryStockDetailByStockDetailIdList(@Param("stockDetailIdList")List<Integer> stockDetailIdList);
	
	/**
	 * 通过入库号和库存汇总ID查询信息
	 * @param storageNo
	 * @param stockSumIdByDisList
	 * @return
	 */
	List<Integer> queryStockDetailIdByStorageNoAndSumId(@Param("storageNo")String storageNo, @Param("stockSumIdByDisList")List<String> stockSumIdByDisList);
	
	/**
	 * 通过入库号查询明细号（这个方法重复了，后期修改）
	 * @param storageNo
	 * @return
	 */
	List<StockDetail> queryStockDetailListByStorageNo(@Param("storageNo")String storageNo);
	
	/**
	 * 通过出库号查询卡产品代码及数量
	 * @param storageNo
	 * @return
	 */
	List<StockDetail> queryStockDetailByLstOutNo(@Param("storageNo")String storageNo,@Param("column")String column,
			@Param("stockStatus")String stockStatus);
   
	/**
	 * 通过出库号查询卡产品代码及数量,并汇总数量
	 * @param storageNo
	 * @return
	 */
	List<StockDetail> queryStockDetailByLstOutNoAndSum(@Param("storageNo")String storageNo,@Param("column")String column,
			@Param("stockStatus")String stockStatus);
	
	/**
	 * 配送出库时撤销操作
	 * @param storageNo
	 */
	void updateByOutgoingCancel(@Param("storageNo")String storageNo);
	
	/**
	 * 撤销废卡上缴，白卡上缴出库时，删除出库详细信息
	 * @param storageNo
	 */
	void deleteByOutingCancel(String storageNo);

}